package com.exer.basic.map;

import java.util.HashMap;

/**
 * 3.3.1 HashMap
 * 当且仅当hashCode一致并且equals比较一致的对象才会被HashMap认为是一个对象
 */
public class HashMapSample {
    public static void main(String[] args) {
        HashMap<HS, String> map = new HashMap<>();
        map.put(new HS(), "1");
        map.put(new HS(), "2");
        //hashCode一致的HS类并没有发生冲突，两个HS对象都被正常的存入了HashMap
        System.out.println(map);

        /**
         * 存入重写过equals的HS子类对象:
         * hashCode一致，同时equals返回true的对象发生冲突，第三个HS对象替代了第一个
         */
        map.put(new HS() {
            @Override
            public boolean equals(Object obj) {
                return true;
            }
        }, "3");
        System.out.println(map);

        /**
         * 重写了hashCode使之不一致，同时equals返回true的对象,也没有发生冲突，被正确的
         * 存入了HashMap
         */
        map.put(new HS() {
            @Override
            public int hashCode() {
                return 2;
            }

            public boolean equals(Object obj) {
                return true;
            }
        }, "3");

        System.out.println(map);
    }

    static class HS {
        public int hashCode() {
            return 1;
        }
    }
}
